package co.edu.usbcali.csru.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {

	private List<String> Admin = new ArrayList<String>();
	private List<String> Administrador = new ArrayList<String>();
	private List<String> Propietario = new ArrayList<String>();
	private List<String> Arrendatario = new ArrayList<String>();
	private List<String> GuardiaSeguridad = new ArrayList<String>();
	private List<String> externo = new ArrayList<String>();

	public void destroy() {
		// TODO Auto-generated method stub

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		//casting del request y response que llegan por parametro
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse httpServletResponse = (HttpServletResponse) response;


		String path = httpServletRequest.getContextPath();
		String basePath = httpServletRequest.getScheme() + "://"
		+ httpServletRequest.getServerName() + ":"
		+ httpServletRequest.getServerPort() + path + "/";

		// se pide la sesion que viene en el request si existe, si no existe no crea una nueva 
		HttpSession session = httpServletRequest.getSession(false);

		String pageRequested = httpServletRequest.getRequestURI().toString();

		if (session == null) {
			session = httpServletRequest.getSession(true);
			httpServletResponse.sendRedirect(basePath);
		}else if (externo.contains(pageRequested)) {
			chain.doFilter(request, response);
		}else if ((session.getAttribute("Usuario") == null)
				&& (!pageRequested.contains("iniciarSesion.jspx"))) {
			httpServletResponse.sendRedirect(basePath);
		}


		String tusuario = (String) session.getAttribute("TipoUsuario");

		if (tusuario == null && pageRequested.contains("iniciarSesion.jspx")) {
			//session.invalidate();
			session = httpServletRequest.getSession(true);
			httpServletResponse.sendRedirect(basePath);
			chain.doFilter(request, response);
		}

		if (tusuario != null && !pageRequested.contains("iniciarSesion.jspx")) {

			if ((tusuario.equals("ADMIN") == true) && (Admin.contains(pageRequested) == true)) {
				chain.doFilter(request, response);
			}else if ((tusuario.equals("ADMINISTRADOR") == true) && (Administrador.contains(pageRequested) == true)) {
				chain.doFilter(request, response);
			}else if ((tusuario.equals("PROPIETARIO") == true) && (Propietario.contains(pageRequested) == true)) {
				chain.doFilter(request, response);
			}else if ((tusuario.equals("ARRENDATARIO") == true) && (Arrendatario.contains(pageRequested) == true)) {
				chain.doFilter(request, response);
			}else if ((tusuario.equals("GUARDIA DE SEGURIDAD") == true) && (GuardiaSeguridad.contains(pageRequested) == true)) {
				chain.doFilter(request, response);
			}
			

			if ((tusuario.equals("ADMIN") == true) && (Admin.contains(pageRequested) == false)) {
				session = httpServletRequest.getSession(true);
				httpServletResponse.sendRedirect("/CSRU/JSPX/menuAdminGlobal.jspx");
				chain.doFilter(request, response);
			}else if ((tusuario.equals("ADMINISTRADOR") == true) && (Administrador.contains(pageRequested) == false)) {
				session = httpServletRequest.getSession(true);
				httpServletResponse.sendRedirect("/CSRU/JSPX/menuAdministrador.jspx");
				chain.doFilter(request, response);
			}else if ((tusuario.equals("PROPIETARIO") == true) && (Propietario.contains(pageRequested) == false)) {
				session = httpServletRequest.getSession(true);
				httpServletResponse.sendRedirect("/CSRU/JSPX/menuPropietario.jspx");
				chain.doFilter(request, response);
			}else if ((tusuario.equals("ARRENDATARIO") == true) && (Arrendatario.contains(pageRequested) == false)) {
				session = httpServletRequest.getSession(true);
				httpServletResponse.sendRedirect("/CSRU/JSPX/menuArrendatario.jspx");
				chain.doFilter(request, response);
			}else if ((tusuario.equals("GUARDIA DE SEGURIDAD") == true) && (GuardiaSeguridad.contains(pageRequested) == false)) {
				session = httpServletRequest.getSession(true);
				httpServletResponse.sendRedirect("/CSRU/JSPX/menuGuardiaSeguridad.jspx");
				chain.doFilter(request, response);
			}
		}

		/*else {
		//session.invalidate();
		session = httpServletRequest.getSession(true);
		httpServletResponse.sendRedirect(basePath);
		chain.doFilter(request, response);
	}*/

	}
	public void init(FilterConfig arg0) throws ServletException {

		Admin = llenarAdmin(Admin);
		Administrador = llenarAdministrador(Administrador);
		Propietario = llenarPropietario(Propietario);
		Arrendatario = llenarArrendatario(Arrendatario);
		GuardiaSeguridad = llenarGuardiaSeguridad(GuardiaSeguridad);
		

	}

	public List<String> llenarAdmin(List<String> Admin){

		Admin.add("/CSRU/JSPX/menuAdminGlobal.jspx");
		Admin.add("/CSRU/JSPX/administrador.jspx");
		Admin.add("/CSRU/JSPX/autorizacion.jspx");
		Admin.add("/CSRU/JSPX/ciudad.jspx");
		Admin.add("/CSRU/JSPX/concepto.jspx");
		Admin.add("/CSRU/JSPX/correspondencia.jspx");
		Admin.add("/CSRU/JSPX/cuenta.jspx");
		Admin.add("/CSRU/JSPX/detalleCorrespondencia.jspx");
		Admin.add("/CSRU/JSPX/detalleFactura.jspx");
		Admin.add("/CSRU/JSPX/division.jspx");
		Admin.add("/CSRU/JSPX/estado.jspx");
		Admin.add("/CSRU/JSPX/factura.jspx");
		Admin.add("/CSRU/JSPX/grupoFamiliar.jspx");
		Admin.add("/CSRU/JSPX/inmueble.jspx");
		Admin.add("/CSRU/JSPX/movMesInmueble.jspx");
		Admin.add("/CSRU/JSPX/multa.jspx");
		Admin.add("/CSRU/JSPX/pais.jspx");
		Admin.add("/CSRU/JSPX/persona.jspx");
		Admin.add("/CSRU/JSPX/presupuesto.jspx");
		Admin.add("/CSRU/JSPX/propietarioInmueble.jspx");
		Admin.add("/CSRU/JSPX/recepcion.jspx");
		Admin.add("/CSRU/JSPX/reserva.jspx");
		Admin.add("/CSRU/JSPX/rubro.jspx");
		Admin.add("/CSRU/JSPX/tipoCategoria.jspx");
		Admin.add("/CSRU/JSPX/tipoConcepto.jspx");
		Admin.add("/CSRU/JSPX/tipoCorrespondencia.jspx");
		Admin.add("/CSRU/JSPX/tipoDocumento.jspx");
		Admin.add("/CSRU/JSPX/tipoPersona.jspx");
		Admin.add("/CSRU/JSPX/tipoUsuario.jspx");
		Admin.add("/CSRU/JSPX/tipoVehiculo.jspx");
		Admin.add("/CSRU/JSPX/tipoZonaComun.jspx");
		Admin.add("/CSRU/JSPX/tipoZonaExtra.jspx");
		Admin.add("/CSRU/JSPX/unidadResidencial.jspx");
		Admin.add("/CSRU/JSPX/usuario.jspx");
		Admin.add("/CSRU/JSPX/vehiculo.jspx");
		Admin.add("/CSRU/JSPX/zonaComun.jspx");
		Admin.add("/CSRU/JSPX/zonaExtra.jspx");
		Admin.add("/CSRU/JSPX/registroAdministrador.jspx");
		Admin.add("/CSRU/JSPX/activarAdministrador.jspx");
		Admin.add("/CSRU/JSPX/registroGuardiaSeguridad.jspx");
		Admin.add("/CSRU/JSPX/activarGuardiaSeguridad.jspx");
		Admin.add("/CSRU/JSPX/cambiarContrasena.jspx");
		return Admin;
	}

	public List<String> llenarAdministrador(List<String> Administrador){

		Administrador.add("/CSRU/JSPX/menuAdministrador.jspx");
		Administrador.add("/CSRU/JSPX/zonaComun.jspx");
		Administrador.add("/CSRU/JSPX/division.jspx");
		Administrador.add("/CSRU/JSPX/estado.jspx");
		Administrador.add("/CSRU/JSPX/tipoCategoria.jspx");
		Administrador.add("/CSRU/JSPX/tipoConcepto.jspx");
		Administrador.add("/CSRU/JSPX/tipoCorrespondencia.jspx");
		Administrador.add("/CSRU/JSPX/tipoVehiculo.jspx");
		Administrador.add("/CSRU/JSPX/tipoZonaComun.jspx");
		Administrador.add("/CSRU/JSPX/tipoZonaExtra.jspx");
		Administrador.add("/CSRU/JSPX/inmueble.jspx");
		Administrador.add("/CSRU/JSPX/zonaExtra.jspx");
		Administrador.add("/CSRU/JSPX/cambiarContrasena.jspx");
		Administrador.add("/CSRU/JSPX/modificarZonaExtra.jspx");
		Administrador.add("/CSRU/JSPX/registroPropietario.jspx");
		Administrador.add("/CSRU/JSPX/registroArrendatario.jspx");
		Administrador.add("/CSRU/JSPX/registroGuardiaSeguridad.jspx");
		Administrador.add("/CSRU/JSPX/activarGuardiaSeguridad.jspx");
		return Administrador;
	}

	public List<String> llenarPropietario(List<String> Propietario){

		Propietario.add("/CSRU/JSPX/menuPropietario.jspx");
		Propietario.add("/CSRU/JSPX/autorizacion.jspx");
		Propietario.add("/CSRU/JSPX/persona.jspx");
		Propietario.add("/CSRU/JSPX/reserva.jspx");
		Propietario.add("/CSRU/JSPX/cambiarContrasena.jspx");
		Propietario.add("/CSRU/JSPX/registroGrupoFamiliar.jspx");
		return Propietario;
	}
	
	public List<String> llenarArrendatario(List<String> Arrendatario){

		Arrendatario.add("/CSRU/JSPX/menuArrendatario.jspx");
		Arrendatario.add("/CSRU/JSPX/cambiarContrasena.jspx");
		Arrendatario.add("/CSRU/JSPX/autorizacion.jspx");
		Arrendatario.add("/CSRU/JSPX/reserva.jspx");
		Arrendatario.add("/CSRU/JSPX/registroGrupoFamiliar.jspx");
		return Arrendatario;
	}
	
	public List<String> llenarGuardiaSeguridad(List<String> GuardiaSeguridad){

		GuardiaSeguridad.add("/CSRU/JSPX/menuGuardiaSeguridad.jspx");
		GuardiaSeguridad.add("/CSRU/JSPX/consultarAutorizacion.jspx");
		GuardiaSeguridad.add("/CSRU/JSPX/cambiarContrasena.jspx");

		return GuardiaSeguridad;
	}


}
